我有关于SUBSTR功能的问题.
想象一下表(TABLE1):
ABC_DEF DESCRIPTION -------- ------------- 0999 TEST INFO
如果我这样查询:
SELECT * FROM TABLE1 WHERE ( ABC_DEF = '0999' )
我得到了这个结果:
ABC_DEF DESCRIPTION -------- ------------- 0999 TEST INFO
但是,如果我这样做:
SELECT * FROM TABLE1 WHERE ( ABC_DEF = SUBSTR('00000999', 5, 4) )
我得到0结果.我根本不明白这种行为.属性ABC_DEF是char(8).
甲CHAR(8)
列将右垫与空间的值(CHR(32)
)字符,直到它具有8的长度.
SQL小提琴
Oracle 11g R2架构设置:
CREATE TABLE table1 ( ABC_DEF CHAR(8), DESCRIPTION VARCHAR2(20) ); INSERT INTO table1 VALUES ( '0999', 'TEST INFO' );
查询1:
SELECT * FROM TABLE1 WHERE ABC_DEF = '0999'
结果:
| ABC_DEF | DESCRIPTION | |----------|-------------| | 0999 | TEST INFO |
查询2:
SELECT * FROM TABLE1 WHERE ABC_DEF = SUBSTR('00000999', 5, 4)
结果:
问题3:
SELECT * FROM TABLE1 WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )
结果:
| ABC_DEF | DESCRIPTION | |----------|-------------| | 0999 | TEST INFO |